package com.wmwj.hxlj.controller;

import com.wmwj.hxlj.entity.CollectionFolder;
import com.wmwj.hxlj.entity.User;
import com.wmwj.hxlj.entity.vo.CollectionFolderVo;
import com.wmwj.hxlj.entity.vo.UserVo;
import com.wmwj.hxlj.service.UserService;
import com.wmwj.hxlj.utils.Result;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

@RestController
@RequestMapping("/user")
public class UserController {
    // 自动注入UserService，用于处理用户相关的业务逻辑
    @Autowired
    private UserService userService;

    // 处理GET请求的 findById 方法，根据用户ID查找用户信息
    @RequestMapping("/findById")
    public User findById(@RequestParam Long id){
        // 调用userService的findById方法，传入用户ID，并返回查询到的用户对象
        return userService.findById(id);
    }

    // 处理POST请求的 register 方法，用于用户注册
    @PostMapping("/register")
    public Result<UserVo> register(@RequestBody User user) {
        // 调用userService的register方法，传入用户信息，并返回注册结果
        return userService.register(user);
    }

    // 处理POST请求的 login 方法，用于用户登录
    @PostMapping("/login")
    public Result login(@RequestBody User user) {
        // 调用userService的login方法，传入用户信息，并返回登录结果
        return userService.login(user);
    }

    // 处理PUT请求的 updatePassword 方法，用于更新用户密码
    @PutMapping("/updatePassword")
    public Result<String> updatePassword(@RequestParam Long id,@RequestParam String oldPassword,@RequestParam String newPassword) {
        // 调用userService的updatePassword方法，传入用户ID、旧密码和新密码，并返回更新结果
        return userService.updatePassword(id, oldPassword, newPassword);
    }

    // 处理PUT请求的 updateInfo 方法，用于更新用户信息
    @PutMapping("/updateInfo")
    public Result updateUserInfo(@RequestBody User user) {
        return userService.updateUserInfo(user);
    }

    // 处理DELETE请求的 deactivateAccount 方法，用于停用用户账户
    @DeleteMapping("/deactivate")
    public Result<String> deactivateAccount(@RequestParam Long id, @RequestParam String password) {
        // 调用userService的deactivateAccount方法，传入用户ID和密码，并返回停用账户的结果
        return userService.deactivateAccount(id, password);
    }

    //增加用户粉丝数
    @PutMapping("/incrementFollowerCount")
    public Result<Integer> incrementFollowerCount(@RequestParam Long followeeId,@RequestParam Long followerId){
        //调用userService的incrementFollowerCount方法，传入关注者和被关注者的ID，并返回增加粉丝数的结果
        return userService.incrementFollowerCount(followeeId, followerId);
    }

    //判断用户是否已关注用户
    @GetMapping("/isFollowed")
    public Result<Boolean> isFollowed(@RequestParam Long followeeId,@RequestParam Long followerId){
        //调用userService的isFollowed方法，传入关注者和被关注者的ID，并返回判断结果
        return userService.isFollowed(followeeId, followerId);
    }

    //创建收藏文件夹
    @PostMapping("/createCollectionFolder")
    public Result<String> createCollectionFolder(@RequestBody CollectionFolder collectionFolder){
        //调用userService的createCollectionFolder方法，传入收藏文件夹信息，并返回创建结果
        return userService.createCollectionFolder(collectionFolder);
    }

    //批量获取收藏文件夹
    @GetMapping("/getCollectionFolder")
    public Result<List<CollectionFolderVo>> getCollectionFolder(@RequestParam Long userId){
        //调用userService的getCollectionFolder方法，传入用户ID，并返回获取结果
        return userService.getCollectionFolder(userId);
    }

    //批量删除收藏文件夹
    @DeleteMapping("/batchDeleteCollectionFolder")
    public Result<String> batchDeleteCollectionFolder(@RequestParam Long userId, @RequestBody List<Long> ids){
        //调用userService的batchDeleteCollectionFolder方法，传入收藏文件夹ID列表，并返回删除结果
        return userService.batchDeleteCollectionFolder(userId,ids);
    }

    //修改收藏文件夹信息
    @PutMapping("/updateCollectionFolder")
    public Result<CollectionFolder> updateCollectionFolder(@RequestBody CollectionFolder collectionFolder){
        //调用userService的updateCollectionFolder方法，传入收藏文件夹信息，并返回修改结果
        return userService.updateCollectionFolder(collectionFolder);
    }


}
